package com.zhuyp.spring.boot.utils;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Properties;

/**
 * 对属性文件操作的工具类 获取，新增，修改 注意： 以下方法读取属性文件会缓存问题,在修改属性文件时，不起作用， InputStream in =
 * PropertiesUtils.class.getResourceAsStream("/config.properties"); 解决办法： String
 * savePath = PropertiesUtils.class.getResource("/config.properties").getPath();
 * 
 * @author Vincent 2015-5-1
 * @Email: planegame@qq.com
 * @version 1.0v
 */
public class PropertiesUtils {
    /**
     * 获取属性文件的数据 根据key获取值
     * 
     * @param fileName
     *            文件名 (注意：加载的是src下的文件,如果在某个包下．请把包名加上)
     * @param key
     * @return
     */
    public static String findPropertiesKey(String key) {

        try {
            Properties prop = getProperties();
            return prop.getProperty(key);
        } catch (Exception e) {
            return "";
        }

    }

    public static void main(String[] args) {
        Properties prop = new Properties();
        InputStream in = PropertiesUtils.class.getResourceAsStream("/config.properties");
        try {
            prop.load(in);
            Iterator<Entry<Object, Object>> itr = prop.entrySet().iterator();
            while (itr.hasNext()) {
                Entry<Object, Object> e = (Entry<Object, Object>) itr.next();
                System.err
                        .println((e.getKey().toString() + "" + e.getValue().toString()));
            }
        } catch (Exception e) {

        }
    }

    /**
     * 返回 Properties
     * 
     * @param
     * @return
     */
    public static Properties getProperties() {
        Properties prop = new Properties();
        String savePath = PropertiesUtils.class.getResource("/config.properties")
                .getPath();
        // 以下方法读取属性文件会缓存问题
        // InputStream in = PropertiesUtils.class
        // .getResourceAsStream("/config.properties");
        try {
            InputStream in = new BufferedInputStream(new FileInputStream(savePath));
            prop.load(in);
        } catch (Exception e) {
            return null;
        }
        return prop;
    }

    /**
     * 返回 Properties
     * 
     * @param fileName
     *            文件名 (注意：加载的是src下的文件,如果在某个包下．请把包名加上)
     * @param
     * @return
     */
    public static Properties getProperties(String fileName) {
        Properties prop = new Properties();
        String savePath = PropertiesUtils.class.getResource("/" + fileName).getPath();
        // 以下方法读取属性文件会缓存问题
        // InputStream in = PropertiesUtils.class
        // .getResourceAsStream("/config.properties");
        try {
            InputStream in = new BufferedInputStream(new FileInputStream(savePath));
            prop.load(in);
        } catch (Exception e) {
            return null;
        }
        return prop;
    }

    /**
     * 写入properties信息
     * 
     * @param key
     *            名称
     * @param value
     *            值
     */
    public static void modifyProperties(String key, String value) {
        try {
            // 从输入流中读取属性列表（键和元素对）
            Properties prop = getProperties();
            prop.setProperty(key, value);
            String path = PropertiesUtils.class.getResource("/config.properties")
                    .getPath();
            FileOutputStream outputFile = new FileOutputStream(path);
            prop.store(outputFile, "modify");
            outputFile.close();
            outputFile.flush();
        } catch (Exception e) {
        }
    }

    public static void modifyProperties(Properties prop,String propFileName) {
        try {
            String path = PropertiesUtils.class.getResource(propFileName)
                    .getPath();
            System.out.println("######"+path);
            FileOutputStream outputFile = new FileOutputStream(path);
            prop.store(outputFile, "modify");
            outputFile.close();
            outputFile.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}